#include "iic.h"
#include "si7006.h"
extern void delay_ms(unsigned int ms);
/*
 * 函数名：si7006_init
 * 函数功能：SI7006芯片的初始化
 * 函数参数：无
 * 函数返回值：无
*/
void si7006_init(void)
{
	i2c_init();
	// 向用户寄存器中写入数据
	i2c_start();
	i2c_write_byte(SI7006_SLAVE << 1);
	i2c_wait_ack();
	i2c_write_byte(USER_REG_CMD);
	i2c_wait_ack();
	i2c_write_byte(USER_REG_VALUE);
	i2c_wait_ack();
	i2c_stop();
}
/*
 * 函数名：si7006_read_hum_data
 * 函数功能：读取SI7006的湿度转换结果
 * 函数参数：
 *     slave_addr ： 从机地址
 *     cmd_code ： 命令码
 * 函数返回值：湿度测量的数字量
*/
unsigned short si7006_read_hum_data(unsigned char slave_addr, 
		unsigned char cmd_code)
{
	unsigned short dat;
	unsigned short dat_h, dat_l;
	i2c_start();
	i2c_write_byte(slave_addr << 1);
	i2c_wait_ack();
	i2c_write_byte(cmd_code);
	i2c_wait_ack();
	i2c_start();
	i2c_write_byte((slave_addr << 1) | 1);
	i2c_wait_ack();
	delay_ms(100);   // 等待转换结束之后在读取转换的结果
	dat_h = i2c_read_byte(0);
	dat_l = i2c_read_byte(1);
	i2c_stop();

	dat = dat_h ;
	dat = dat << 8 | dat_l;
	return dat;
}
/*
 * 函数名：si7006_read_temp_data
 * 函数功能：读取SI7006的温度转换结果
 * 函数参数：
 *     slave_addr ： 从机地址
 *     cmd_code ： 命令码
 * 函数返回值：温度测量的数字量
*/
short si7006_read_temp_data(unsigned char slave_addr, 
		unsigned char cmd_code)
{
	short dat;
	unsigned short dat_h, dat_l;
	i2c_start();
	i2c_write_byte(slave_addr << 1);
	i2c_wait_ack();
	i2c_write_byte(cmd_code);
	i2c_wait_ack();
	i2c_start();
	i2c_write_byte((slave_addr << 1) | 1);
	i2c_wait_ack();
	delay_ms(100);   // 等待转换结束之后在读取转换的结果
	dat_h = i2c_read_byte(0);
	dat_l = i2c_read_byte(1);
	i2c_stop();

	dat = dat_h ;
	dat = dat << 8 | dat_l;
	return dat;
}

